Liveness Probe, Kubernetes gibi konteyner orkestrasyon sistemlerinde, bir konteyner içindeki uygulamanın çalışır durumda olup olmadığını belirlemek için kullanılan bir mekanizmadır. Temel amacı, uygulamanın sağlıksız bir durumda olup olmadığını (örneğin, kilitlenmiş, yanıt vermeyen veya beklenmeyen bir davranış sergileyen) tespit etmek ve bu durumda konteyneri yeniden başlatarak uygulamanın kendini iyileştirmesini sağlamaktır.
Konteyner Orkestrasyonu: Konteynerlerin yönetimi, ölçeklenmesi ve otomatikleştirilmesi süreçlerini kapsayan sistemlerdir. Kubernetes, Docker Swarm ve Apache Mesos gibi araçlar bu kategoriye girer.
Konteyner: Bir uygulamayı ve bağımlılıklarını içeren, izole edilmiş bir ortamdır. Docker en popüler konteynerleştirme platformudur.
Sağlık Kontrolleri (Health Checks): Bir uygulamanın veya servisin çalışır ve sağlıklı olup olmadığını doğrulamak için yapılan periyodik kontrollerdir. Liveness Probe, Readiness Probe ve Startup Probe gibi farklı türleri vardır.
Liveness Probe'un temel amacı, bir konteyner içindeki uygulamanın canlı olup olmadığını belirlemektir. Canlılık, uygulamanın hala çalışır durumda olduğunu ve temel işlevlerini yerine getirebildiğini ifade eder. Eğer Liveness Probe, uygulamanın canlı olmadığını tespit ederse, Kubernetes konteyneri otomatik olarak yeniden başlatır. Bu yeniden başlatma, uygulamanın potansiyel bir kilitlenme veya yanıt vermeme durumundan kurtulmasına ve normal çalışmasına devam etmesine yardımcı olur.
Örneğin, bir web sunucusu gelen isteklere yanıt vermemeye başlarsa (belki bir bellek sızıntısı veya başka bir hata nedeniyle), Liveness Probe bu durumu tespit eder ve Kubernetes sunucuyu yeniden başlatır. Bu, kullanıcıların sürekli olarak hatalı bir siteyle karşılaşmasını engeller.
Kubernetes, Liveness Probe'lar için farklı kontrol mekanizmaları sunar:
HTTP Probe: Belirtilen bir HTTP endpoint'ine GET isteği gönderir. Eğer endpoint 200-399 (başarılı) aralığında bir HTTP status kodu döndürürse, probe başarılı sayılır. Aksi takdirde, konteyner sağlıksız olarak işaretlenir. Bu yöntem, RESTful API'ler için idealdir.
TCP Probe: Belirtilen port üzerinde bir TCP bağlantısı açmaya çalışır. Bağlantı başarılı bir şekilde kurulursa, probe başarılı sayılır. Aksi takdirde, konteyner sağlıksız olarak işaretlenir. Bu yöntem, veritabanları veya diğer ağ tabanlı servisler için uygundur.
Exec Probe: Konteyner içinde belirtilen bir komutu çalıştırır. Eğer komut 0 dönüş koduyla (exit code) tamamlarsa, probe başarılı sayılır. Aksi takdirde, konteyner sağlıksız olarak işaretlenir. Bu yöntem, daha karmaşık sağlık kontrolleri için esneklik sağlar.
Kubernetes pod'larında Liveness Probe, YAML veya JSON formatında yapılandırılır. Yapılandırma, hangi tür probenin kullanılacağını, hangi endpoint'in veya komutun kontrol edileceğini, kontrol sıklığını ve kabul edilebilir başarısızlık sayısını belirler.
Örnek bir YAML yapılandırması:
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: my-container
image: my-image
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 30 # İlk kontrolün gecikme süresi
periodSeconds: 10 # Kontrol sıklığı (saniye)
timeoutSeconds: 5 # Kontrol için zaman aşımı (saniye)
failureThreshold: 3 # Başarısız sayısının eşiği
Bu örnekte, her 10 saniyede bir /healthz
endpoint'ine HTTP GET isteği gönderilir. Eğer istek 5 saniye içinde yanıt vermezse veya 200-399 aralığında bir HTTP status kodu döndürmezse, kontrol başarısız sayılır. Üç başarısız kontrolden sonra, konteyner yeniden başlatılır. initialDelaySeconds
, konteyner başlatıldıktan sonra ilk kontrolün ne kadar süre sonra yapılacağını belirtir.
Kubernetes'te üç ana sağlık kontrolü türü bulunur:
Liveness Probe: Uygulamanın canlı olup olmadığını kontrol eder. Başarısız olursa, konteyner yeniden başlatılır.
Readiness Probe: Uygulamanın isteklere hizmet vermeye hazır olup olmadığını kontrol eder. Başarısız olursa, konteyner servisten çıkarılır (trafik almayı durdurur) ancak yeniden başlatılmaz.
Startup Probe: Uygulamanın başlatılmasının tamamlanıp tamamlanmadığını kontrol eder. Özellikle uzun süren başlatma süreçleri olan uygulamalar için kullanışlıdır. Liveness ve Readiness Probe'larını etkisiz hale getirir, uygulama tamamen başladıktan sonra bu probalar devreye girer.
Bu üç probe türü, birlikte kullanılarak bir uygulamanın sağlığını kapsamlı bir şekilde izlemeye ve yönetmeye olanak tanır.
Liveness Probe, Kubernetes gibi konteyner orkestrasyon sistemlerinde uygulamanın güvenilirliğini ve kullanılabilirliğini artırmak için kritik bir araçtır. Doğru yapılandırılmış bir Liveness Probe, uygulamanın sağlıksız durumlardan otomatik olarak kurtulmasını ve sürekli olarak hizmet vermeye devam etmesini sağlar. Uygulama geliştiricileri ve sistem yöneticileri, Liveness Probe'un nasıl çalıştığını ve nasıl yapılandırılacağını iyi anlamalıdır.